# -*- coding: utf-8 -*-
# @File  : sched模块.py
# @Author: zbh
# @Date  : 2025/2/17_16:16

'''sched 模块是 Python 标准库中的一个通用事件调度器，它提供了一种机制来在未来的某个时间点执行任务。
这个模块允许你安排函数在特定的时间或经过一定的延迟后调用，它使用一个优先队列来管理事件，
确保事件按照预定的时间顺序执行'''

'''sched 模块主要基于一个时间调度算法，它的核心是 sched.scheduler 类。
这个类有两个主要的参数：
timefunc：一个用于获取当前时间的函数，通常使用 time.time() 来获取当前的时间戳（以秒为单位）。
delayfunc：一个用于暂停执行的函数，通常使用 time.sleep() 来实现延迟。'''


'''基本使用步骤
1、创建调度器对象：使用 sched.scheduler(timefunc, delayfunc) 创建一个调度器实例。
2、添加事件：使用调度器的 enter() 或 enterabs() 方法添加要调度的事件。
3、enter(delay, priority, action, argument=(), kwargs={})：安排一个事件在 delay 秒后执行，
priority 是事件的优先级（数值越小优先级越高），action 是要执行的函数，argument 是传递给函数的位置参数，
kwargs 是传递给函数的关键字参数。
4、enterabs(time, priority, action, argument=(), kwargs={})：安排一个事件在绝对时间 time 执行，
其他参数与 enter() 相同。
5、运行调度器：调用调度器的 run() 方法开始执行调度的事件。'''


import sched
import time
import os

ctime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

# 创建调度器对象s，time.time作为时间函数，time.sleep作为延迟函数
s = sched.scheduler(time.time, time.sleep)
print(s)

# 定义要执行的任务
def print_time(object):
    print("{},第一个程序，当前时间：{}".format(object, time.ctime()))
    os.system("python test.py")


def print_time2(object):
    print("{},第二个程序，当前时间：{}".format(object, time.ctime()))

def print_time3(object):
    print("{},第三个程序，当前时间：{}".format(object, time.ctime()))



# 安排任务在5秒后执行
s.enter(5, 1, print_time,argument=(ctime,))  # 设置函数5s后执行，优先级为1，函数为print_time，参数为ctime
s.enter(10, 1, print_time2,argument=(ctime,))
s.enter(150, 1, print_time3,argument=(ctime,))

# for i in range(1,10):
#     s.enter(i, 1, print_time, argument=(ctime,))

# 运行调度器
print("开始等待任务执行... ...")
s.run()  # 开始运行调度器，程序会暂停5秒，然后执行任务，然后再暂停5秒，然后执行任务，直到所有任务执行完毕
print("任务执行完毕......")




'''
sched 模块是一个单线程的调度器，在 run() 方法执行期间，程序会阻塞直到所有调度的事件都执行完毕。
调度的时间精度取决于 timefunc 和 delayfunc 的精度，在不同的操作系统和硬件环境下可能会有一定的误差。
综上所述，sched 模块是一个简单而实用的事件调度工具，适用于需要在特定时间或经过一定延迟后执行任务的场景
'''













